import { mergeOptions } from "./utils"

export function initGlobalAPI (Vue) {
  // 静态方法
  Vue.options = {}
  Vue.mixin = function (mixin) {
    // 选项合并
    this.options = mergeOptions(this.options, mixin)
    return this
  }

  Vue.extend = function (options) {
    // 实现根据用户的参数 返回一个构造函数
    function Sub (options = {}) { // 最终使用一个组件 就是 new 一个实例
      this._init(options) // 默认对子类进行初始化
    }

    Sub.prototype = Object.create(Vue.prototype) // Sub.prototype.__proto__ === Vue.prototype
    Sub.prototype.constructor = Sub

    // 希望将用户传递的参数 和全局的 Vue.options 来合并
    Sub.options = mergeOptions(Vue.options, options) // 保存用户的选项

    return Sub
  }

  Vue.options.components = {}
  Vue.component = function (id, definition) {
    // 如果 definition 已经是一个函数 说明用户自己调用了 Vue.extend
    definition = typeof definition === 'function' ? definition : Vue.extend(definition)

    Vue.options.components[id] = definition
    console.log(Vue.options);
  }
}